package com.grad.webstudy.service;

import com.github.pagehelper.PageInfo;
import com.grad.webstudy.annota.CurrentUser;
import com.grad.webstudy.common.Page;
import com.grad.webstudy.dto.ResetPasswordDto;
import com.grad.webstudy.model.User;
import com.grad.webstudy.vo.UserVo;
import org.springframework.stereotype.Service;

import javax.validation.constraints.Max;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.List;

/**
 * @Description: 用户service类
 * @Author: zjf
 * @Date: 2020/1/14 11:20.
 */
public interface UserService {

    /**
     * 注册新用户
     *
     * @param phone
     * @param password
     * @param validCode  用户发送的验证码
     * @param systemCode 系统生成的随机验证码
     * @return
     */
    int register(String phone, String password, String validCode, String systemCode);


    /**
     * 管理员直接添加用户
     * @param username
     * @param password
     * @param phone
     * @return
     */
    int addUser(String username,String password,String phone);

    /**
     * 查看手机号是否注册，如果已注册，返回false，代表不能注册；没有返回true，代表可注册。
     *
     * @param phone
     * @return
     */
    boolean checkPhone(String phone);


    /**
     * 用户登录
     *
     * @param phone
     * @param password
     * @return
     */
    User login(String phone, String password,String validCode,String systemCode);


    /**
     * 管理员账号登录
     * @param username
     * @param password
     * @return
     */
    User loginForAdmin(String username,String password);

    /**
     * 分页查询所有用户信息
     *
     * @param currPage
     * @param pageSize
     * @param keyword
     * @return
     */
    PageInfo queryAllUsers(int currPage, int pageSize, String keyword);


    /**
     * 更改用户状态
     *
     * @param userId
     * @param status
     * @return
     */
    boolean changeUserStatus(int userId, int status);


    /**
     * 根据用户id删除用户
     *
     * @param userIds
     * @return
     */
    boolean deleteUsersByIds(String userIds);


    /**
     * 重置密码 可用于管理员重置和普通用户重置
     * @param resetPasswordDto
     * @param systemCode 系统随机生成的验证码
     * @return
     */
    boolean resetPassword(ResetPasswordDto resetPasswordDto,String systemCode);


    /**
     * 更改用户角色
     *
     * @param userId
     * @param roleIds
     * @return
     */
    boolean updateUserRole(int userId, String roleIds);

    /**
     * 更新用户头像
     *
     * @param userId
     * @param imagePath
     * @return
     */
    boolean updateHeadImage(int userId, String imagePath);


    /**
     *
     * 根据用户id查询用户信息
     * 角色信息需要转换
     * @param userId
     * @return
     */
    UserVo queryUserById(int userId);

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    boolean updateUserById(User user);


    /**
     * 根据用户id获取用户信息，该方法只对系统内获取用户信息使用
     * @param userId
     * @return
     */
    User selectUserForSystem(int userId);

    /**
     * 根据用户id获取用户权限
     * @param userId
     * @return
     */
    List<String> queryUserAuth(int userId);


    /**
     * 统计用户数量
     * @return
     */
    Integer queryUserCount();
}
